// 使用使用模拟数据（请求拦截配置）
function useMockData() {
    // 权限分组管理
    Mock.mock(RegExp('/api/admin/auth-groups/index' + ".*"), option => new AuthGroupsMock().index(option))
    Mock.mock(RegExp('/api/admin/auth-groups/read' + ".*"), option => new AuthGroupsMock().read(option))
    Mock.mock('/api/admin/auth-groups/save', 'post', option => new AuthGroupsMock().save(option))
    Mock.mock('/api/admin/auth-groups/update', 'put', option => new AuthGroupsMock().update(option))
    Mock.mock(RegExp('/api/admin/auth-groups/delete' + ".*"), 'delete', option => new AuthGroupsMock().delete(option))
}

/**
 * AuthGroups 模拟数据
 */
class AuthGroupsMock {

    // 显示资源列表
    index(option) {
        let param = this.parseOption(option);
        console.log('[权限分组模拟数据] 显示资源列表 param=', param, '&option=', option);
        // 可以通过传参 _success 来控制返回消息的成功状态。
        return Mock.mock({
            success: param._success, // '@boolean'
            message: '@ctitle',
            code: '@integer(1000,9999)',
            data: {
                total: '@integer(0,10)',
                current_page: 1,
                last_age: '@integer(1,5)',
                'data|1-10': [
                    {
                        // 'id': '@id', // 主键ID
                        'id': '@increment', // 主键ID
                        'group_name': '@cname', // 分组名称
                        'text': '@cname', // 分组标题
                        'rules': '@cname', // 规则ID
                        'app_flag': '@cname', // 模块标志
                        'status': '@integer(100,1000)', // 状态
                    }
                ],
            },
        })
    }

    // 显示指定的资源
    read(option) {
        let param = this.parseOption(option);
        console.log('[权限分组模拟数据] 显示指定的资源 param=', param, '&option=', option);
        if (param.id == undefined) {
            return this.stdMessage(false, '参数无效');
        }
        return Mock.mock({
            success: param._success, // '@boolean'
            message: '@ctitle',
            code: '@integer(1000,9999)',
            'data': {
                // 'id': '@id', // 主键ID
                'id': '@increment', // 主键ID
                'group_name': '@cname', // 分组名称
                'text': '@cname', // 分组标题
                'rules': '@cname', // 规则ID
                'app_flag': '@cname', // 模块标志
                'status': '@integer(100,1000)', // 状态
            }
        })
    }

    // 保存新建的资源
    save(option) {
        let param = this.parseOption(option);
        console.log('[权限分组模拟数据] 保存新建的资源 param=', param, '&option=', option);
        if (!param.user_name) {
            return this.stdMessage(false, '用户名是必填项');
        }
        return Mock.mock({
            success: param._success, // '@boolean'
            message: '@ctitle',
            code: '@integer(1000,9999)',
            'data': {
                'id': '@id', // 随机编号
            }
        })
    }

    // 保存更新的资源
    update(option) {
        let param = this.parseOption(option);
        console.log('[权限分组模拟数据] 保存更新的资源 param=', param, '&option=', option);
        if (!param.id || isNaN(param.id)) {
            return this.stdMessage(false, '参数无效');
        }
        if (!param.user_name || param.user_name.trim().length == 0) {
            return this.stdMessage(false, '用户名无效');
        }
        return Mock.mock({
            success: param._success, // '@boolean'
            message: '@ctitle',
            code: '@integer(1000,9999)',
            'data': {
                'id': param.id, // 随机编号
            }
        })

    }

    // 删除指定资源
    delete(option) {
        let param = this.parseOption(option);
        console.log('[权限分组模拟数据] 删除指定资源 param=', param, '&option=', option);
        if (param.id == undefined) {
            return this.stdMessage(false, '参数无效');
        }
        return Mock.mock({
            success: param._success, // '@boolean'
            message: '@ctitle',
            code: '@integer(1000,9999)',
            'data': {
                'id': param.id, // 随机编号
            }
        })
    }

    /**
     * 解析参数
     * option= {url:'/api/read?id=1', type:'GET', data:null}
     * @param {Object} option 
     * @returns
     */
    parseOption(option) {
        let param = {}
        if (option.url.indexOf('?') > -1) {
            new URLSearchParams(option.url.substring(option.url.indexOf('?') + 1)).forEach((v, k) => {
                param[k] = v;
            })
        }
        if (option.body) {
            if (option.body instanceof FormData) {
                option.body.forEach((v, k) => {
                    param[k] = v;
                })
            } else {
                param = JSON.parse(option.body);
            }
        }
        // 可以通过传参 _success 来控制返回消息的成功状态。默认返回成功消息。
        if (typeof (param._success) != 'boolean') {
            param._success = true; // Mock.mock('@boolean')
        }
        return param;
    }

    /**
     * 返回标准消息对象
     * @param {Boolean} success 
     * @param {String} message 
     * @param {Any} data 
     * @param {Number} code 
     * @returns 
     */
    stdMessage(success, message, data = '', code = 0) {
        return { success, message, data, code, }
    }
}